// PROGRAMA : ESTCC131
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SSP - SECRETARIA DE ESTADO DE SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// OBJETIVO : CONSULTA EMISSAO QUADRO ESTATISTICO DO CRIMINAL
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Estte131Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Estcc131A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Estcm001;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Prodestcm001;
import br.com.vti.sisp_sicrim.antigo.model.SicEstatistica;
import br.com.vti.sisp_sicrim.antigo.model.SicSenha;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.model.Sislac01;
import br.com.vti.sisp_sicrim.antigo.model.Sislct01;
import br.com.vti.sisp_sicrim.antigo.model.Sisldat8;
import br.com.vti.sisp_sicrim.antigo.model.Sisll001;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Estcc131 OBJETIVO : CONSULTA EMISSAO QUADRO ESTATISTICO DO CRIMINAL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/estcc131")
public class Estcc131 {
	// Views utilizadas
	SicSenha senhaView = new SicSenha();
	SicEstatistica vwCadest = new SicEstatistica();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Estte131Report report;
	Estcc131A estcc131A;
	Estcm001 estcm001;
	// Includes utilizados
	Sislac01 sislac01 = new Sislac01();
	Sislct01 sislct01 = new Sislct01();
	Sisldat8 sisldat8 = new Sisldat8();
	Sisll001 sisll001 = new Sisll001();
	// Areas globais / session
	Scrg001 scrg001;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais(); // Scrpp001 scrpp001 = new
	// Scrpp001 ();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Estcc131 estcc131Anterior;
	String faseproc = "0";
	long matricula = 0;

	private int dtini = 0;
	private int dtfim = 0;
	private int tempo = 0;
	private int k = 0;
	private int i = 0;
	// private String motida = "";
	// > DATA
	private String motid2 = "";
	// > DATFIM (DATA FINAL)
	private String[] tabm = { "", "   ", "VEI", "CON", "MUL", "   ", "IPV", "ROU", "   ", "   ", "   ", "   ", "   ", "IDC", "ICR", "FUN", "   ", "   " };
	// > MATRICULA
	private String empresa = "";
	// MENSAGENS DO SISTEMA
	private int versao = 0;
	private InputStreamDownload relatorio;

	private Estcc131A preMapas() {
		sessao.getScrg001().setWVltw(17);
		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName().toUpperCase());

		estcc131A = new Estcc131A(true, sessao);
		estcm001 = new Estcm001(true, sessao);
		estcm001.setNavegar("../estcc131/executar");
		empresa = "SSP";
		versao = 02;
		estcc131A.setDataCorrente(UtilBean.obtemDataDia());
		estcc131A.setNomeClasse(this.getClass().getSimpleName().toUpperCase());
		// Par�grafo: rp0()
		return estcc131A;
	}

	public Estcc131(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Estcc131A estcc131A, Estcm001 estcm001) {
		try {
			return main(estcc131A, estcm001);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, sessao, this.getClass().getSimpleName());
		}
		return relatorio;
	}

	private InputStreamDownload main(Estcc131A pestcc131A, Estcm001 pestcm001) throws Exception {
		if (pestcm001 == null && pestcc131A == null) {
			primeiraVez = true;
			// estcm001 = new Estcm001 (primeiraVez);
			estcc131A = preMapas();
			estcc131A.setNavegar("../estcc131/executar");
			result.include("estcc131A", estcc131A);
			sessao.setAtributo("ESTCC131", this);
			estcc131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(pestcc131A, pestcm001);
			if (pestcm001 != null) {
				result.include("estcc131A", estcc131A);
				sessao.setAtributo("ESTCC131", this);
				estcm001.setNavegar("../estcc131/executar");
				estcc131A.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
				return null;
			}
		}
		estcm001.getLista().clear();
		digitador.clear();
		matricula = estcc131A.getMat();
		estcc131A.receberTela(false, result);

		if (estcc131A.getOperacao().equals("CAD")) {
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.executar(null);
			return null;
		}

		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			// Scrpp001 scrpp001 = new Scrpp001 ();
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.executar(null);
			return null;
		}

		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			estcc131A.enviarMensagem(null, "");
			sessao.setAtributo("ESTCC131", this);
			result.include("estcc131A", estcc131A);
			estcc131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!UtilBean.validarMascara(estcc131A.getDatini(), "yyyyMMdd")) {
			estcc131A.enviarMensagem("operacao", "");
			sessao.setAtributo("ESTCC131", this);
			result.include("estcc131A", estcc131A);
			estcc131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!UtilBean.validarMascara(estcc131A.getDatfim(), "yyyyMMdd")) {
			estcc131A.enviarMensagem("adt", "");
			sessao.setAtributo("ESTCC131", this);
			result.include("estcc131A", estcc131A);
			estcc131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (estcc131A.getDatini() > estcc131A.getDatfim()) {
			estcc131A.enviarMensagem("adt", "");
			sessao.setAtributo("ESTCC131", this);
			result.include("estcc131A", estcc131A);
			estcc131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (estcm001.getOperacao().equals("CAD")) {
			// Scrpp001 scrpp001 = new Scrpp001 ();
			Scrpp001 scrpp001 = new Scrpp001(result, sessao);
			scrpp001.executar(null);
			return null;
		}

		tempo = estcc131A.getDatfim() - estcc131A.getDatini();

		estcc131A.setMotida(UtilBean.moveSubstring(estcc131A.getMotida(), 0, 3, "A", tabm[14]));
		estcc131A.setMotida(UtilBean.moveSubstring(estcc131A.getMotida(), 3, 2, "N", 98));
		estcc131A.setMotida(UtilBean.moveSubstring(estcc131A.getMotida(), 5, 8, "N", estcc131A.getDatini()));
		estcc131A.setMotida(UtilBean.moveSubstring(estcc131A.getMotida(), 13, 7, "N", estcc131A.getMat()));

		motid2 = estcc131A.getMotida();
		motid2 = UtilBean.moveSubstring(motid2, 5, 8, "N", estcc131A.getDatfim());

		// PERFORM TABSSUP2
		if (!UtilBean.validaSelecao(estcc131A.getConimp())) {
			estcc131A.enviarMensagem("jMatriculaj", "");
			// return; verificar
		}

		dtini = estcc131A.getDatini();
		dtini = (int) funcoes.sissd002(dtini);
		dtfim = estcc131A.getDatfim();
		dtfim = (int) funcoes.sissd002(dtfim);
		k = 1;
		estcc131A.setMensagem("");
		if (!estcc131A.getConimp(2).trim().equals("")) {
			// if () {
			boolean temRel = relatorio();

			if (temRel) {
				gerar();
				return relatorio;

			} else {
				sessao.setAtributo("ESTCC131", this);
				result.include("estcm001", estcm001);
				estcm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return null;
			}

			// }
		} else {
			estcm001.getLista().clear();
			digitador.clear();
			if (estcc131A.getMat() > 0) {
				sislct01.tt1 = 18;
				sislct01.cc1 = estcc131A.getMat();
				sislct01.vt1 = funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
				if (sislct01.vt1.equals("@")) {
					estcc131A.setMensagemSaida(" REGISTRO NAO ENCONTRADO");
					sessao.setAtributo("ESTCC131", this);
					result.include("estcc131A", estcc131A);
					estcc131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return null;
				}
				soma();
				tela();
				inicializa();
			}
			boolean achou = false;
			boolean tem = false;
			while (senhaView.pesquisaMatriculaMaior(0)) {
				if (!(senhaView.getNivel() > 0)) {
					continue;
				}
				estcc131A.setMat(senhaView.getMatricula());

				achou = soma();
				if (achou) {
					tem = true;
				}

			}
			if (senhaView.fimDados()) {
				tela();
			}
			estcc131A.setMat(matricula);
			if (tem) {
				estcm001.setMensagem("CONSULTA EFETUADA OK");
				estcm001.setDtini(Integer.valueOf(estcc131A.getDdt() + "" + estcc131A.getMdt() + "" + estcc131A.getAdt()));
				estcm001.setDtfim(Integer.valueOf(estcc131A.getDfi() + "" + estcc131A.getMfi() + "" + estcc131A.getAfi()));
				sessao.setAtributo("ESTCC131", this);
				result.include("estcm001", estcm001);
				estcm001.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			} else {
				estcc131A.setMat(Long.valueOf(matricula));
				estcc131A.setMensagem("REGISTRO NAO ENCONTRADO");
				sessao.setAtributo("ESTCC131", this);
				result.include("estcc131A", estcc131A);
				estcc131A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			}
			return null;
		}

	}

	private boolean soma() {
		while (vwCadest.pesquisaMotidaFaixa(tabm[13], 97, (int) estcc131A.getMat(), estcc131A.getDatini(), estcc131A.getDatfim())) {

			// estcc131A.enviarReceberTela(false, result);
			if (estcc131A.getMat() > 0) {
				if (!(vwCadest.getMatriculaFunc() == estcc131A.getMat())) {
					continue;
				}
			}

			/*
			 * if (estcm001.getMat0(k) != vwCadest.getMatriculaFunc()) { if (estcm001.getMat0(k) == 0) {
			 * 
			 * estcm001.setMat0(k, vwCadest.getMatriculaFunc()); } else { k += 1;
			 * 
			 * estcm001.setMat0(k, vwCadest.getMatriculaFunc()); } }
			 */
			for (i = 1; i <= 6; i++) {
				Long qtdTrans = null;
				try {
					qtdTrans = (Long) vwCadest.getQuantTrans(i);
				} catch (Exception e) {

				}

				if (qtdTrans == null) {
					qtdTrans = 0L;
				}
				// estcm001.setTra0(i, k, (int) (estcm001.getTra0(i, k) + qtdTrans));
				adicionarDigitador(vwCadest.getMatriculaFunc() + "", i, qtdTrans);

				// estcm001.setTra0(7, k, (int) (estcm001.getTra0(7, k) + qtdTrans));

				// estcm001.setTot0(i, (int) (estcm001.getTot0(i) + qtdTrans));
				// estcm001.setTot0(7, (int) (estcm001.getTot0(7) + qtdTrans));

			}
			// if (k == 15) {
			// tela();
			// }
		}

		if (vwCadest.registrosProcessados() == 0) {
			estcc131A.setMensagemSaida("INTERVALO INEXISTENTE");
			return false;
		} else {
			return true;
		}

	}

	private void tela() {
		// estcc131A.setMensagemSaida("CONSULTA EFETUADA OK");
		estcm001.receberTela(false, result);
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 15; i2++) {
				estcm001.setTra0(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 15; i1++) {
			estcm001.setMat0(i1, 0);
		}
		estcc131A.setMotida(UtilBean.moveSubstring(estcc131A.getMotida(), 13, 7, "N", 0));
		// jMatriculaj = 0;
		// datini = 0;
		// datfim = 0;
		for (int i1 = 1; i1 <= 2; i1++) {
			estcc131A.setConimp(i1, "");
		}
		k = 1;
	}

	private boolean relatorio() throws ParseException, JRException, FileNotFoundException {
		if (estcc131A.getMat() > 0) {
			sislct01.tt1 = 18;
			sislct01.cc1 = estcc131A.getMat();

			sislct01.vt1 = funcoes.sisnct01(sislct01.tt1, sislct01.cc1, sislct01.vt1);
			if (sislct01.vt1.equals("@")) {
				estcc131A.setMensagemSaida(" REGISTRO NAO ENCONTRADO");
				return false;
			}
			impr();
			boolean temRel = mais();
			if (!temRel) {
				return false;
			}
			relatorio = report.imprimir();
			inicializa();
			// jMatriculaj = 0;
			// datini = 0;
			// datfim = 0;
			return true;
		}

		int fimdados = 0;
		boolean achou = false;
		boolean tem = false;
		while (vwTabele.pesquisaCodigoTabela(18)) {
			if (fimdados == 0) {
				impr();
			}
			sislac01.niveis = vwTabele.getDescricaoElem();
			if (sislac01.niveis != null && sislac01.niveis.charAt(14) != ' ' && Integer.valueOf(sislac01.niveis.charAt(14)) > 0) {
				estcc131A.setMat(vwTabele.getCodigoElem());
			}

			achou = mais();
			if (achou) {
				tem = true;
			}
			fimdados++;
		}

		if (vwTabele.registrosProcessados() == 0) {
			return false;
		}

		if (!tem) {
			return false;
		}

		gerar();

		relatorio = report.imprimir();
		return true;
	}

	private void gerar() throws ParseException, JRException {

		report.gravaRelatorio(1);

		for (Prodestcm001 linha : estcm001.getLista()) {

			report.setMatricula(Integer.valueOf(linha.getMatricula()));
			report.setCorrecoes(linha.getCorrecoes());
			report.setAlteracoes(linha.getAlteracoes());
			report.setInclusoes(linha.getInclusoes());
			report.setBaixas(linha.getBaixas());
			report.setProntuario(linha.getProntuario());
			report.setIdent(linha.getIdent());
			report.setTotal(linha.getTotal());

			report.gravaRelatorio(2);
			if (report.getPageLine() == report.getPageSize() - 1) {
				report.gravaRelatorio(1);
			}
		}

		if (estcm001.getLista().size() > 0) {

			report.setCorrecoest(estcm001.getProdestcm001().getCorrecoes());
			report.setAlteracoest(estcm001.getProdestcm001().getAlteracoes());
			report.setInclusoest(estcm001.getProdestcm001().getInclusoes());
			report.setBaixast(estcm001.getProdestcm001().getBaixas());
			report.setProntuariot(estcm001.getProdestcm001().getProntuario());
			report.setIdentt(estcm001.getProdestcm001().getIdent());
			report.setTotalt(estcm001.getProdestcm001().getTotal());

			report.gravaRelatorio(3);
		}

	}

	private boolean mais() throws ParseException {
		while (vwCadest.pesquisaMotidaFaixa(tabm[13], 97, (int) estcc131A.getMat(), estcc131A.getDatini(), estcc131A.getDatfim())) {

			// estcc131A.enviarReceberTela(false, result);
			if (estcc131A.getMat() > 0) {
				if (!(vwCadest.getMatriculaFunc() == estcc131A.getMat())) {
					continue;
				}
			}
			/*
			 * if (report.getMat1(k) != vwCadest.getMatriculaFunc()) { if (report.getMat1(k) == 0) { report.setMat1(k, vwCadest.getMatriculaFunc()); } else { k += 1; report.setMat1(k,
			 * vwCadest.getMatriculaFunc()); } }
			 */
			for (i = 1; i <= 6; i++) {
				Long qtdTrans = null;
				try {
					qtdTrans = (Long) vwCadest.getQuantTrans(i);
				} catch (Exception e) {

				}

				if (qtdTrans == null) {
					qtdTrans = 0L;
				}

				if (qtdTrans > 0) {
					System.out.println();
				}

				adicionarDigitador(vwCadest.getMatriculaFunc() + "", i, qtdTrans);
				// report.setTra1(i, k, (int) (report.getTra1(i, k) + qtdTrans));
				// report.setTra1(7, k, (int) (report.getTra1(7, k) + qtdTrans));

				// report.setTot0(i, (int) (estcm001.getTot0(i) + qtdTrans));
				// report.setTot0(7, (int) (estcm001.getTot0(7) + qtdTrans));

			}

		}
		if (vwCadest.registrosProcessados() == 0) {
			estcc131A.setMensagemSaida("INTERVALO INEXISTENTE");
			return false;
		} else {
			return true;
		}
	}

	private void impr() throws ParseException, JRException, FileNotFoundException {
		// estcc131A.setMensagemSaida("EMISSAO EFETUADA OK");
		// RELATORIO
		report = new Estte131Report();
		report.setPageSize(60);
		report.setLineSize(82);
		report.setDtini(dtini);
		report.setDtfim(dtfim);
		// RELATORIO
		for (int i1 = 1; i1 <= 100; i1++) {
			report.setMat1(i1, 0);
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 100; i2++) {
				report.setTra1(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			estcm001.setTot0(i1, 0);
		}
		estcc131A.setMotida(UtilBean.moveSubstring(estcc131A.getMotida(), 13, 7, "N", 0));
		// jMatriculaj = 0;
		// datini = 0;
		// datfim = 0;
		for (int i1 = 1; i1 <= 2; i1++) {
			estcc131A.setConimp(i1, "");
		}
	}

	private void restaurarEstados(Estcc131A pestcc131A, Estcm001 pestcm001) {
		this.estcc131Anterior = (Estcc131) sessao.getAtributo("ESTCC131");
		if (pestcc131A != null) {
			estcc131A = pestcc131A;
			estcc131A.setjEmpresaj(sessao.getScrg001().getWEmpresaw());
			estcc131A.setjVersaoj(sessao.getScrg001().getWVersaow());
			estcc131A.setjProgramaj(sessao.getScrg001().getWProgramaw());
		} else {
			estcc131A = this.estcc131Anterior.estcc131A;
		}
		estcc131A.setSessao(sessao);
		if (pestcm001 != null) {
			estcm001 = pestcm001;
			estcm001.setjEmpresaj(sessao.getScrg001().getWEmpresaw());
			estcm001.setjVersaoj(sessao.getScrg001().getWVersaow());
			estcm001.setjProgramaj(sessao.getScrg001().getWProgramaw());
		} else {
			estcm001 = this.estcc131Anterior.estcm001;
		}
		estcm001.setSessao(sessao);
		this.faseproc = this.estcc131Anterior.faseproc;
	}

	private void inicializa() throws ParseException {
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 15; i2++) {
				estcm001.setTra0(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 15; i1++) {
			estcm001.setMat0(i1, 0);
		}
		k = 0;
		estcc131A.setMotida(UtilBean.moveSubstring(estcc131A.getMotida(), 13, 7, "N", 0));
		for (int i1 = 1; i1 <= 2; i1++) {
			estcc131A.setConimp(i1, "");
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			for (int i2 = 1; i2 <= 100; i2++) {
				report.setTra1(i1, i2, 0);
			}
		}
		for (int i1 = 1; i1 <= 7; i1++) {
			estcm001.setTot0(i1, 0);
		}

	}

	Map<Integer, Integer> digitador = new HashMap();

	private void adicionarDigitador(String matricula, int opcao, Long qtdTrans) {
		int inclusoes = 0;
		;
		int alteracoes = 0;
		;
		int correcoes = 0;
		;
		int baixas = 0;
		int ident = 0;
		;
		int prontuario = 0;
		;
		int total = 0;
		;

		switch (opcao) {
		case 1:
			inclusoes = qtdTrans.intValue();
			estcm001.getProdestcm001().addInclusoes(inclusoes);
			break;
		case 2:
			alteracoes = qtdTrans.intValue();
			estcm001.getProdestcm001().addAlteracaoes(alteracoes);
			break;
		case 3:
			correcoes = qtdTrans.intValue();
			estcm001.getProdestcm001().addCorrecoes(correcoes);
			break;
		case 4:
			baixas = qtdTrans.intValue();
			estcm001.getProdestcm001().addBaixas(baixas);
			break;
		case 5:
			ident = qtdTrans.intValue();
			estcm001.getProdestcm001().addIdent(ident);
			break;
		case 6:
			prontuario = qtdTrans.intValue();
			estcm001.getProdestcm001().addProntuario(prontuario);
			break;
		}

		try {

			Prodestcm001 s = new Prodestcm001(matricula, inclusoes, alteracoes, correcoes, baixas, ident, prontuario, total);

			Integer index = digitador.get(Integer.valueOf(matricula));

			if (index != null) {
				Integer incl = estcm001.getLista().get(index).getInclusoes();
				Integer alt = estcm001.getLista().get(index).getAlteracoes();
				Integer corr = estcm001.getLista().get(index).getCorrecoes();
				Integer bai = estcm001.getLista().get(index).getBaixas();
				Integer ide = estcm001.getLista().get(index).getIdent();
				Integer pront = estcm001.getLista().get(index).getProntuario();

				switch (opcao) {
				case 1:

					incl = incl + inclusoes;

					break;
				case 2:

					alt = alt + alteracoes;

					break;
				case 3:

					corr = corr + correcoes;
					break;
				case 4:

					bai = bai + baixas;
					break;
				case 5:
					ide = ide + ident;

					break;
				case 6:
					pront = pront + prontuario;

					break;
				}

				s = new Prodestcm001(matricula, incl, alt, corr, bai, ide, pront, 0);
				Prodestcm001 p = estcm001.getLista().get(index);
				estcm001.getLista().remove(p);
				estcm001.getLista().add(index, s);
			} else {
				estcm001.getLista().add(s);
				digitador.put(Integer.valueOf(matricula), estcm001.getLista().size() - 1);
			}

		} catch (Exception e) {
		}

	}

}
